The MaAsLin3 scripts is referenced from MicrobiomeStatPlot [Inerst Reference below].

If you use this script, please cited 如果你使用本代码,请引用:

Yong-Xin Liu, Lei Chen, Tengfei Ma, Xiaofang Li, Maosheng Zheng, Xin Zhou, Liang Chen, Xubo Qian, Jiao Xi, Hongye Lu, Huiluo Cao, Xiaoya Ma, Bian Bian, Pengfan Zhang, Jiqiu Wu, Ren-You Gan, Baolei Jia, Linyang Sun, Zhicheng Ju, Yunyun Gao, Tao Wen, Tong Chen. 2023. EasyAmplicon: An easy-to-use, open-source, reproducible, and community-based pipeline for amplicon data analysis in microbiome research. iMeta 2(1): e83. https://doi.org/10.1002/imt2.83

The online version of this tuturial can be found in https://github.com/YongxinLiu/MicrobiomeStatPlot

Authors First draft(初稿):Defeng Bai(白德凤);Proofreading(校对):Ma Chuang(马闯) and Jiani Xun(荀佳妮);Text tutorial(文字教程):Defeng Bai(白德凤)

Introduction简介

2024年年末,biobakery项目组推出了MaAsLin3, 这里进行MaAsLin3的测试,并进行中文翻译相关软件介绍和使用的内容。

英文原文内容参考:https://github.com/biobakery/biobakery/wiki/MaAsLin3

MaAsLin 3.0教程

MaAsLin3 是 MaAsLin(具有线性模型的微生物组多变量关联)的下一代。这个全面的 R 包可以有效地确定表型元数据和微生物组学特征之间的多变量关联。相对于 MaAsLin 2,MaAsLin 3 引入了量化和测试丰度和流行度关联的能力,同时更好地考虑了组合性。通过结合广义线性模型,MaAsLin 3 可适应大多数现代流行病学研究设计,包括横断面研究和纵向研究。

如果您使用 MaAsLin 3 软件,请引用论文:

William A. Nickols, Thomas Kuntz, Jiaxian Shen, Sagun Maharjan, Himel Mallick, Eric A. Franzosa, Kelsey N. Thompson, Jacob T. Nearing, Curtis Huttenhower. MaAsLin 3: Refining and extending generalized multivariable linear models for meta-omic association discovery. bioRxiv 2024.12.13.628459; doi: https://doi.org/10.1101/2024.12.13.628459

1. Installing R

2. Installing MaAsLin 3


if (!require("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

#BiocManager::install("biobakery/maaslin3")
library(maaslin3)

3. Microbiome association detection with MaAsLin 3

要运行 MaAsLin 3,用户必须提供每个样本特征丰度表(仍包含零)、每个样本元数据表以及公式或固定效应(也可以添加随机效应),以指定元数据应如何与特征普遍性(特征存在或不存在的可能性)和丰度(如果存在,特征的含量是多少)相关联。MaAsLin 3 将返回一个关联表,其中包括每个特征元数据关联的效应大小和 p 值,以及一个视觉文件夹,其中包括重要关联的摘要图和诊断图。

3.1 MaAsLin 3 输入

MaAsLin3 需要两个输入文件。

1.特征丰度数据框 -格式化为以特征为列、以样本为行。 -此格式的转置也是可以的。 -可能的特征包括分类或基因。这些可以是相对丰度或计数。 -这可以是制表符分隔文件的文件路径。

2.元数据数据框 -格式化为变量作为列,样本作为行。 -此格式的转置也可以。 -可能的元数据包括性别或年龄。 -这可以是制表符分隔文件的文件路径。

数据文件可以包含元数据文件中未包含的样本(反之亦然)。对于这两种情况,未包含在两个文件中的样本将从分析中删除。此外,样本在两个文件中的顺序不需要相同,因为行和列将根据需要进行扫描和重新排列。

元数据中含有 NA 值的样本在拟合模型时将被排除。建议在随机缺失假设下提前删除这些样本,或使用多重插补来运行完整数据集。

示例输入文件可以在 MaAsLin 3 源或 MaAsLin 3 教程文件存储库的 inst/extdata 文件夹中找到。提供的文件是根据人类微生物组计划 2 (HMP2) 数据生成的,可从 https://ibdmdb.org/ 下载。

-HMP2_taxonomy.tsv:一个制表符分隔文件,其中样本为行,物种为列。它是完整 HMP2 分类法的子集,仅包含部分物种丰度。

-HMP2_metadata.tsv:一个制表符分隔的文件,其中样本为行,元数据为列。它是完整 HMP2 元数据的子集,仅包含部分字段。

library(maaslin3)

# Read abundance table 丰度表
taxa_table_name <- system.file("extdata", "HMP2_taxonomy.tsv", package = "maaslin3")
taxa_table <- read.csv(taxa_table_name, sep = '\t')

# Read metadata table 元信息表
metadata_name <- system.file("extdata", "HMP2_metadata.tsv", package = "maaslin3")
metadata <- read.csv(metadata_name, sep = '\t')

# Factor the categorical variables to test IBD against healthy controls
# 考虑分类变量来检验 IBD 与健康对照组
metadata$diagnosis <- 
  factor(metadata$diagnosis, levels = c('nonIBD', 'UC', 'CD'))
metadata$dysbiosis_state <- 
  factor(metadata$dysbiosis_state, levels = c('none', 'dysbiosis_UC', 'dysbiosis_CD'))
metadata$antibiotics <- 
  factor(metadata$antibiotics, levels = c('No', 'Yes'))

# Check how the dataframes look like
# 检查数据
taxa_table[1:5, 1:5]
metadata[1:5, 1:5]

3.2 运行 MaAsLin 3

MaAsLin 3 通过指定丰度表 (input_data)、元数据表 (input_metadata)、输出目录 (output) 和模型来运行。模型可以来自公式或术语向量。无论哪种情况,变量名称都不应包含空格或不寻常的字符。

-公式:公式参数应设置为满足 lme4 规范的任何公式:固定效应、随机效应(第 4.2 节)、交互项(第 4.3 节)、多项式项等都可以包含。如果将分类变量作为固定效应包含,则每个级别将针对第一个因子级别进行测试。此外,可以通过在公式中包含 group(variable_name) 和 ordered(variable_name) 来包含有序预测因子(第 4.4 节)和组预测因子(第 4.5 节)。当数据涉及配对或匹配的病例对照样本时,可以通过使用 strata(variable_name) 指定分组变量来运行条件逻辑回归。

-向量:或者,可以为参数 fixed_effects、random_effects、group_effects、ordered_effects 和 strata_effects 提供一个变量名称向量。变量应作为列名包含,而不是使用 $ 符号。分类变量应预先按因子排序,或者应将引用作为“变量,引用”字符串提供,用分号分隔多个变量(例如,variable_1,reference_1;variable_2,reference_2)。注意:在变量和级别之间添加空格可能会导致使用错误的参考级别。

由于 MaAsLin 3 识别了流行性(存在/不存在)关联,因此样本读取深度(读取次数)应作为协变量(如果可用)包括在内。当模型中不包含读取深度时,更深的测序可能会以可能与感兴趣的元数据虚假相关的方式增加特征检测。

在 HMP2 数据上运行 MaAsLin 3

以下命令在 HMP2 数据上运行 MaAsLin 3,运行多变量回归模型来测试微生物物种丰度和患病率与 IBD 诊断和菌群失调评分之间的关联,同时控制抗生素使用、年龄和采样深度(读数)。丰度关联来自将多元线性模型拟合到特征存在的样本中特征以 2 为底的对数相对丰度。患病率关联来自将多元逻辑模型拟合到所有样本中特征的存在/不存在数据。输出将定向到当前工作目录下名为 hmp2_output 的文件夹(输出 =“hmp2_output”)。

为了显示每种类型的图(见下文),绘制的显著关联的最大数量已增加,即 max_pngs=100(默认值为 30)。前四个参数以外的所有其他参数都是默认参数,但为了清晰起见,仍包含在内:

-随后将使用总和缩放(normalization = ‘TSS’)和对数变换(‘transform = ’LOG’)。这些几乎始终是推荐的选择(并且所有 MaAsLin 3 评估都是使用这些选项执行的),但允许使用其他规范化和变换(请参阅 ?maaslin3 中的规范化和变换)。

-数据增强程序用于避免逻辑回归中的线性可分性(augment = TRUE)。几乎总是建议这样做,尽管可以关闭它(请参阅手册中的 augment)。

-连续元数据变量是 z 分数标准化的(减去平均值,除以标准差),其中 standardize = TRUE,以便系数处于同一尺度(改善可视化)。

-名义 FDR 水平 0.1(max_significance = 0.1)决定哪些关联是显著的,但这也可以改变(参见手册中的 max_significance)。

-对于丰度系数,为了解释相对丰度数据中的组成性,重要性是通过与特征元数据的中位数系数 (median_comparison_abundance) 进行比较来确定的。由于普遍性系数不具有相同的组成特性,因此它们与 0 (median_comparison_prevalence) 进行比较。有关这些参数的讨论,请参阅下文。

一个 CPU 用于拟合(核心 = 1)。

丰度、流行度和方差过滤参数不包括在内,默认情况下为 0。与其他差异丰度工具不同,低流行度特征不需要过滤掉,因为 MaAsLin 3 中的流行度建模已经考虑了高比例的零。但是,过滤低流行度特征可能会提高功效。

默认情况下,模型拟合时会打印多行信息,但可以使用详细程度参数更改详细程度(例如,verbosity =‘WARN’)。

中位数比较

当 median_comparison_abundance 或 median_comparison_prevalence 处于开启状态时,元数据的系数将根据该元数据的中位数系数(特征之间的中位数)进行测试。否则,系数将与 0 进行测试。对于丰度关联,这是为了考虑组合性,即在相对尺度上针对零进行测试并不等同于在绝对尺度上针对零进行测试。用户手册包含有关何时使用 median_comparison_abundance 和 median_comparison_prevalence 的更广泛讨论,但总结如下:

-median_comparison_abundance 默认为 TRUE,在使用相对丰度数据时,应使用它来在绝对尺度上进行推断。当 median_comparison_abundance 为 TRUE 时,只有 p 值和 q 值会发生变化。返回的系数仍然是相对丰度系数,除非 subtract_median 为 TRUE,在这种情况下将减去中位数。

-在以下情况下,median_comparison_abundance 应该为 FALSE:(1) 测试显著相对关联;(2) 在假设总绝对丰度不变的情况下测试绝对丰度关联;或 (3) 在提供带有 unscaled_abundance 的 spike-in 或总丰度时测试显著绝对关联。

-median_comparison_prevalence 默认为 FALSE。


set.seed(1)
fit_out <- maaslin3(input_data = taxa_table,
                    input_metadata = metadata,
                    output = 'hmp2_output',
                    formula = '~ diagnosis + dysbiosis_state +
                        antibiotics + age + reads',
                    normalization = 'TSS',
                    transform = 'LOG',
                    augment = TRUE,
                    standardize = TRUE,
                    max_significance = 0.1,
                    median_comparison_abundance = TRUE,
                    median_comparison_prevalence = FALSE,
                    max_pngs = 250,
                    cores = 1,
                    verbosity ='WARN')
#> 2024-12-30 15:45:33.631119 WARNING::Fitting problem for feature 50 returning NA
#> 2024-12-30 15:45:33.697759 WARNING::Fitting problem for feature 62 returning NA
#> 2024-12-30 15:45:33.777233 WARNING::Fitting problem for feature 74 returning NA
#> 2024-12-30 15:45:33.80418 WARNING::Fitting problem for feature 78 returning NA
#> 2024-12-30 15:45:33.835467 WARNING::Fitting problem for feature 84 returning NA
#> 2024-12-30 15:45:33.907829 WARNING::Fitting problem for feature 96 returning NA
#> 2024-12-30 15:45:33.919621 WARNING::Fitting problem for feature 97 returning NA
#> 2024-12-30 15:45:33.929982 WARNING::Fitting problem for feature 99 returning NA
#> 2024-12-30 15:45:34.009714 WARNING::Fitting problem for feature 114 returning NA
#> 2024-12-30 15:45:34.01574 WARNING::Fitting problem for feature 115 returning NA
#> 2024-12-30 15:45:34.057454 WARNING::Fitting problem for feature 123 returning NA
#> 2024-12-30 15:45:34.096746 WARNING::Fitting problem for feature 130 returning NA
#> 2024-12-30 15:45:34.107131 WARNING::Fitting problem for feature 132 returning NA
#> 2024-12-30 15:45:34.137256 WARNING::Fitting problem for feature 139 returning NA
#> 2024-12-30 15:45:34.189861 WARNING::Fitting problem for feature 150 returning NA
#> 2024-12-30 15:45:46.279717 WARNING::Fitting problem for feature 50 returning NA
#> 2024-12-30 15:45:46.337084 WARNING::Fitting problem for feature 62 returning NA
#> 2024-12-30 15:45:46.392562 WARNING::Fitting problem for feature 74 returning NA
#> 2024-12-30 15:45:46.409149 WARNING::Fitting problem for feature 78 returning NA
#> 2024-12-30 15:45:46.443082 WARNING::Fitting problem for feature 84 returning NA
#> 2024-12-30 15:45:46.514397 WARNING::Fitting problem for feature 96 returning NA
#> 2024-12-30 15:45:46.522249 WARNING::Fitting problem for feature 97 returning NA
#> 2024-12-30 15:45:46.532856 WARNING::Fitting problem for feature 99 returning NA
#> 2024-12-30 15:45:46.619067 WARNING::Fitting problem for feature 114 returning NA
#> 2024-12-30 15:45:46.624271 WARNING::Fitting problem for feature 115 returning NA
#> 2024-12-30 15:45:46.662868 WARNING::Fitting problem for feature 123 returning NA
#> 2024-12-30 15:45:46.691022 WARNING::Fitting problem for feature 130 returning NA
#> 2024-12-30 15:45:46.700482 WARNING::Fitting problem for feature 132 returning NA
#> 2024-12-30 15:45:46.732958 WARNING::Fitting problem for feature 139 returning NA
#> 2024-12-30 15:45:46.792034 WARNING::Fitting problem for feature 150 returning NA
#> 2024-12-30 15:45:46.928215 WARNING::Deleting existing residuals file: hmp2_output/fits/residuals_linear.rds
#> 2024-12-30 15:45:46.967808 WARNING::Deleting existing fitted file: hmp2_output/fits/fitted_linear.rds
#> 2024-12-30 15:45:47.024419 WARNING::Deleting existing residuals file: hmp2_output/fits/residuals_logistic.rds
#> 2024-12-30 15:45:47.25062 WARNING::Deleting existing fitted file: hmp2_output/fits/fitted_logistic.rds

3.3 MaAsLin 3 输出

HMP2 输出可以在 MaAsLin 3 教程文件库中找到。

显著相关

MaAsLin 3 的主要输出是 significance_results.tsv 中的显著关联列表。此列表列出了所有通过 MaAsLin 3 联合或个体 q 值显著性阈值的关联,按个体 q 值的递增顺序排列。格式为:

-feature 和 metadata 是功能和元数据名称。

-value 和 name 是来自模型的元数据和变量名称的值。

-coef 和 stderr 是模型的拟合系数和标准误差。在丰度模型中,元数据变量的一个单位变化对应于特征相对丰度的 2coef 倍变化。在流行模型中,元数据变量的一个单位变化对应于特征存在的对数几率的 coef 变化。

-pval_individual 和 qval_individual 是个体关联的 p 值和错误发现率 (FDR) 校正的 q 值。FDR 校正是对所有 p 值进行的,在丰度和流行度建模中没有错误。

-pval_joint 和 qval_joint 是联合流行度和丰度关联的 p 值和 q 值。p 值来自将关联的丰度和流行度 p 值的最小值代入 Beta(1,2) CDF。它被解释为如果特征和元数据之间既没有丰度关联也没有流行度关联,则丰度或流行度关联会像观察到的那样极端的概率。

-模型指定关联是丰富性还是普遍性。

-N 和 N_not_zero 是该特征的数据点总数和非零数据点总数。

完整输出文件结构

MaAsLin 3 生成两种类型的输出文件(如下所述):数据和可视化。此外,从 maaslin3(上面的 fit_out)返回的对象包含所有数据和结果(参见 ?maaslin_fit)。

1.数据输出文件 -significant_results.tsv

-all_results.tsv 格式与上面相同,但适用于所有关联,并带有一个额外的列,列出了模型拟合中的任何错误。

-features 该文件夹包含输入特征表的过滤、规范化和转换版本。 这些步骤按上述顺序依次执行。 如果设置了选项使得某个步骤不会改变数据,则仍然会输出结果表。

-models_linear.rds and models_logistic.rds 这些文件包含每个模型适合对象的列表。 仅当 save_models 设置为 TRUE 时才会生成。

-residuals_linear.rds and residuals_logstic.rds 这些文件包含一个数据框,其中有每个特征的残差。对于逻辑拟合,残差是偏差残差。

-fitted_linear.rds and fitted_logistic.rds 这些文件包含一个数据框,其中列出了每个特征的拟合值。

-ranef_linear.rds and ranef_logistic.rds 这些文件包含一个数据框,其中提取了每个特征的随机效应(当指定随机效应时)。

-maaslin3.log 该文件包含运行的所有日志信息。 它包括所有设置、警告、错误和运行的步骤。

2.可视化输出文件 -summary_plot.pdf 该文件包含最显著关联的组合系数图和热图。在热图中,一颗星表示单个 q 值低于参数 max_significance,两颗星表示单个 q 值低于 max_significance 除以 10。

-association_plots/[metadatum]/[association]/[metadatum][feature][association].png 为每个显著关联生成一个图,最多可达 max_pngs。 散点图用于连续元数据丰度关联。 箱线图用于分类数据丰度关联。 箱线图用于连续数据流行度关联。 网格用于分类数据流行度关联。 绘制的数据点经过过滤、规范化和转换,因此图中的比例是拟合时使用的比例。

每个关联图的右上角是结果文件中显著关联的名称、单个关联的 FDR 校正 q 值、数据集中的样本数以及特征的非零丰度样本数。在具有分类元数据变量的图中,参考类别位于左侧,右上角的显著 q 值和系数按上面指定的值的顺序排列。由于显示的系数对应于具有(可能)缩放元数据变量的完整拟合模型,因此绘制的边际关联可能与显示的系数不匹配。但是,这些图旨在提供可解释的视觉效果,同时通常与完整模型一致。

诊断(Diagnostics)

在结果中需要检查几个常见问题:

1.如果在拟合过程中出现警告或错误,它们会记录在 all_results.tsv 的错误列中。通常,这些警告表示模型拟合失败或拟合效果不佳,不应信任,但有时警告可能是良性的,模型拟合可能仍然合理。如果产生错误,用户应检查感兴趣的关联。 当 warn_prevalence=TRUE 时,错误列中将生成一条注释,指示何时可能由丰度关联引起普遍性关联。应使用诊断视觉效果进行目视检查。

2.尽管进行了错误检查,但模型拟合度较差仍可能导致显著结果。通常可以使用 association_plots 目录中的视觉效果来诊断这些问题。 任何与分类变量的显著丰度关联通常应在每个类别中至少有 10 个观测值。 与分类变量的显著流行关联还应在每个显著类别中至少有 10 个存在该特征的样本和至少 10 个不存在该特征的样本。 应目视检查与连续元数据的显著丰度关联是否存在有影响力的异常值。

3.q 值是针对所有丰度和普遍性关系进行 FDR 校正的,因此最好只对感兴趣的变量的 p 值进行 FDR 校正。当存在许多重要但不感兴趣的关联(例如,许多读取深度关联)时,这可以减少误报。

4.还有一些经验法则需要牢记。 理想情况下,模型的样本数量(逻辑拟合的所有样本,线性拟合的非零样本)应为协变量项(所有连续变量加上所有分类变量水平)的 10 倍左右。 除非包含非常小的非标准化预测因子,否则绝对值大于 15 的系数(效应大小)通常是可疑的。(系数 15 对应于倍数变化 >30000!)。如果遇到这样的系数,请检查 (1) 没有出现错误,(2) 诊断看起来合理,(3) 拟合中使用了足够数量的样本,(4) q 值显著,(5) 元数据不是高度共线,以及 (6) 随机效应合理。

重绘图(Replotting)

运行 maaslin3 一次后,即可运行 maaslin_plot_results_from_output 来(重新)创建图表。这样,即使没有 maaslin_fit 或 maaslin3 返回的 R 对象(例如,如果通过命令行拟合模型),用户也可以绘制关联。建议使用对公式绘图具有鲁棒性的简单变量名称来拟合模型,然后将其转换为适合绘图的正确名称。同样,heatmap_vars 和 coef_plot_vars 可以在任何时候指定,但通常更容易先查看名称如何出现,然后选择哪些元数据变量将进入系数图,哪些将进入热图,然后使用 maaslin_plot_results_from_output。此重新绘图的代码示例可在 maaslin3_tutorial.Rmd 小插图中找到。

  1. 高级主题

4.1 绝对丰度

大多数微生物组方法历来都侧重于相对丰度(1 的比例)。然而,一些实验方案可以估计绝对丰度(细胞计数/浓度)。MaAsLin 3 可用于两种类型的绝对丰度估计:spike-in 和总丰度缩放。在spike-in 程序中,添加少量已知数量的微生物,否则这些微生物不会存在于样本中,然后照常进行测序程序。然后,已经存在于群落中的微生物的绝对丰度估计为:

Absoluteabundanceothermicrobe = RelativeabundanceothermicrobeRelativeabundancespike - inmicrobe.(Absoluteabundancespike - inmicrobe)

或者,可以确定样本中的微生物总丰度(例如,使用标记基因的 qPCR 或通过细胞计数)。然后,估算群落中微生物的绝对丰度如下:

Absoluteabundancemicrobe = (Totalabsoluteabundance).(Relativeabundancemicrobe)

加标(Spike-in)

以下部分展示了使用来自 SparseDOSSA2 的模拟数据的合成加标程序。丰度表与 MaAsLin 3 的任何其他丰度表输入类似,只是“Feature101”是加标(必须存在于每个样本中)。比例因子数据框的唯一列名是“Feature101”,其中包含每个样本的加标绝对丰度(行名)。如果向所有样本添加了相同数量的加标,则此列可以完全为 1(或任何其他任意值)。使用加标程序时,比例因子数据框应有一个列,其名称与丰度表中的某个特征相同,将用作加标。示例输入文件可以在 MaAsLin 3 源或 MaAsLin 3 教程文件存储库的 inst/extdata 文件夹中找到。

# Abundance table
taxa_table_name <- system.file("extdata", "abundance_spike_in_ex.tsv", package = "maaslin3")
spike_in_taxa_table <- read.csv(taxa_table_name, sep = '\t')

# Metadata table
metadata_name <- system.file("extdata", "metadata_spike_in_ex.tsv", package = "maaslin3")
spike_in_metadata <- read.csv(metadata_name, sep = '\t')
for (col in c('Metadata_1', 'Metadata_2', 'Metadata_5')) {
  spike_in_metadata[,col] <- factor(spike_in_metadata[,col])
}

# Spike-in table
unscaled_name <- system.file("extdata", "scaling_factors_spike_in_ex.tsv", package = "maaslin3")
spike_in_unscaled <- read.csv(unscaled_name, sep = '\t')

spike_in_taxa_table[c(1:5, 101),1:5]
spike_in_metadata[1:5,]
spike_in_unscaled[1:5, , drop=F]

以下代码适合绝对丰度模型。请注意,由于该过程涉及缩放相对丰度比,因此必须将标准化设置为 TSS。此外,median_comparison_abundance 现在设置为 FALSE,因为我们想要测试绝对系数是否为零。绝对丰度的数据框作为 unscaled_abundance 参数包含在内,并且将根据列名自动检测 spike-in 策略。输出文件可以在 MaAsLin 3 教程文件存储库中找到。


fit_out <- maaslin3(
    input_data = spike_in_taxa_table,
    input_metadata = spike_in_metadata,
    output = 'spike_in_demo',
    formula = '~ Metadata_1 + Metadata_2 + Metadata_3 +
        Metadata_4 + Metadata_5',
    normalization = 'TSS',
    transform = 'LOG',
    median_comparison_abundance = FALSE,
    unscaled_abundance = spike_in_unscaled,
    verbosity ='WARN')
#> 2024-12-30 15:47:08.588293 WARNING::Fitting problem for feature 17 returning NA
#> 2024-12-30 15:47:08.600455 WARNING::Fitting problem for feature 18 returning NA
#> 2024-12-30 15:47:08.839335 WARNING::Fitting problem for feature 55 returning NA
#> 2024-12-30 15:47:08.967929 WARNING::Fitting problem for feature 73 returning NA
#> 2024-12-30 15:47:09.011622 WARNING::Fitting problem for feature 80 returning NA
#> 2024-12-30 15:47:10.174627 WARNING::Fitting problem for feature 17 returning NA
#> 2024-12-30 15:47:10.187946 WARNING::Fitting problem for feature 18 returning NA
#> 2024-12-30 15:47:10.464819 WARNING::Fitting problem for feature 55 returning NA
#> 2024-12-30 15:47:10.625473 WARNING::Fitting problem for feature 73 returning NA
#> 2024-12-30 15:47:10.676793 WARNING::Fitting problem for feature 80 returning NA
#> 2024-12-30 15:47:10.887518 WARNING::Deleting existing residuals file: spike_in_demo/fits/residuals_linear.rds
#> 2024-12-30 15:47:10.900322 WARNING::Deleting existing fitted file: spike_in_demo/fits/fitted_linear.rds
#> 2024-12-30 15:47:10.912068 WARNING::Deleting existing residuals file: spike_in_demo/fits/residuals_logistic.rds
#> 2024-12-30 15:47:10.945567 WARNING::Deleting existing fitted file: spike_in_demo/fits/fitted_logistic.rds

总丰度缩放(Total abundance scaling)

以下部分展示了使用来自 SparseDOSSA2 的模拟数据的合成总丰度缩放程序。丰度表与 MaAsLin 3 的任何其他丰度表输入一样,没有任何额外功能。缩放因子数据框的唯一列名是“total”,其中包含每个样本的总绝对丰度(行名)。示例输入文件可以在 MaAsLin 3 源或 MaAsLin 3 教程文件存储库的 inst/extdata 文件夹中找到。


# Abundance table
taxa_table_name <- system.file("extdata", "abundance_total_ex.tsv", package = "maaslin3")
total_scaling_taxa_table <- read.csv(taxa_table_name, sep = '\t')

# Metadata table
metadata_name <- system.file("extdata", "metadata_total_ex.tsv", package = "maaslin3")
total_scaling_metadata <- read.csv(metadata_name, sep = '\t')
for (col in c('Metadata_1', 'Metadata_3', 'Metadata_5')) {
  spike_in_metadata[,col] <- factor(spike_in_metadata[,col])
}

# Total abundance table
unscaled_name <- system.file("extdata", "scaling_factors_total_ex.tsv", package = "maaslin3")
total_scaling_unscaled <- read.csv(unscaled_name, sep = '\t')

total_scaling_taxa_table[1:5, 1:5]
total_scaling_metadata[1:5,]
total_scaling_unscaled[1:5, , drop=F]

以下代码适合绝对丰度模型。与以前一样,TSS 必须设置为 TRUE,median_comparison_abundance 设置为 FALSE,并将绝对丰度的数据框作为 unscaled_abundance 参数包含在内。将根据列名检测总丰度缩放程序。输出文件可以在 MaAsLin 3 教程文件存储库中找到。


fit_out <- maaslin3(
    input_data = total_scaling_taxa_table,
    input_metadata = total_scaling_metadata,
    output = 'total_scaling_demo',
    formula = '~ Metadata_1 + Metadata_2 + Metadata_3 +
        Metadata_4 + Metadata_5',
    normalization = 'TSS',
    transform = 'LOG',
    median_comparison_abundance = FALSE,
    unscaled_abundance = total_scaling_unscaled,
    verbosity ='WARN')
#> 2024-12-30 15:47:25.243685 WARNING::Deleting existing residuals file: total_scaling_demo/fits/residuals_linear.rds
#> 2024-12-30 15:47:25.255561 WARNING::Deleting existing fitted file: total_scaling_demo/fits/fitted_linear.rds
#> 2024-12-30 15:47:25.266551 WARNING::Deleting existing residuals file: total_scaling_demo/fits/residuals_logistic.rds
#> 2024-12-30 15:47:25.287913 WARNING::Deleting existing fitted file: total_scaling_demo/fits/fitted_logistic.rds

计算估计的绝对丰度(Computationally estimated absolute abundance)

当使用纯计算方法估计绝对丰度时(例如,Nishijima 等人使用函数 MLP 的 Cell 2024),可以估计丰度表,然后以规范化 = ‘NONE’ 运行,以避免缩放结果。

4.2 随机效应(Random effects)

某些研究对样本观察结果有自然的“分组”,例如纵向设计中按受试者分组,或家庭设计中按家庭分组。统计分析必须解决属于同一组的样本之间的非独立性问题。MaAsLin 3 为此提供了一个具有随机效应的简单界面,用户可以在其中指定分组变量以运行混合效应模型。此分组变量可以通过 random_effects 参数提供,也可以在模型中使用 (1|grouping_variable) 指定。这将添加“随机截距”,即对模型截距进行每组调整。可以根据 lme4 公式解析在公式中指定更复杂的随机效应。例如,HMP2 具有纵向设计,其中同一受试者(列参与者 ID)可以有多个样本。因此,我们在模型中使用参与者 ID 作为随机效应分组变量。示例输入文件可以在 MaAsLin 3 源或 MaAsLin 3 教程文件存储库的 inst/extdata 文件夹中找到,输出文件可以在 MaAsLin 3 教程文件存储库中找到。


# Subset to only CD cases for time; taxa are subset automatically
fit_out <- maaslin3(
    input_data = taxa_table,
    input_metadata = metadata[metadata$diagnosis == 'CD',],
    output = 'random_effects_output',
    formula = '~ dysbiosis_state + antibiotics +
        age + reads + (1|participant_id)',
    plot_summary_plot = FALSE,
    plot_associations = FALSE,
    verbosity ='WARN')
#> 2024-12-30 15:47:40.320638 WARNING::Fitting problem for feature 50 returning NA
#> 2024-12-30 15:47:41.027786 WARNING::Fitting problem for feature 61 returning NA
#> 2024-12-30 15:47:41.746867 WARNING::Fitting problem for feature 73 returning NA
#> 2024-12-30 15:47:41.931507 WARNING::Fitting problem for feature 76 returning NA
#> 2024-12-30 15:47:41.965044 WARNING::Fitting problem for feature 77 returning NA
#> 2024-12-30 15:47:42.243123 WARNING::Fitting problem for feature 82 returning NA
#> 2024-12-30 15:47:43.043134 WARNING::Fitting problem for feature 94 returning NA
#> 2024-12-30 15:47:43.10333 WARNING::Fitting problem for feature 95 returning NA
#> 2024-12-30 15:47:43.257228 WARNING::Fitting problem for feature 97 returning NA
#> 2024-12-30 15:47:44.271458 WARNING::Fitting problem for feature 112 returning NA
#> 2024-12-30 15:47:44.310142 WARNING::Fitting problem for feature 113 returning NA
#> 2024-12-30 15:47:44.799303 WARNING::Fitting problem for feature 120 returning NA
#> 2024-12-30 15:47:45.002196 WARNING::Fitting problem for feature 123 returning NA
#> 2024-12-30 15:47:45.125672 WARNING::Fitting problem for feature 125 returning NA
#> 2024-12-30 15:47:45.154382 WARNING::Fitting problem for feature 126 returning NA
#> 2024-12-30 15:47:45.242121 WARNING::Fitting problem for feature 128 returning NA
#> 2024-12-30 15:47:45.701558 WARNING::Fitting problem for feature 135 returning NA
#> 2024-12-30 15:47:45.992448 WARNING::Fitting problem for feature 140 returning NA
#> 2024-12-30 15:47:46.09266 WARNING::Fitting problem for feature 142 returning NA
#> 2024-12-30 15:47:46.382215 WARNING::Fitting problem for feature 146 returning NA
#> 2024-12-30 15:52:40.561978 WARNING::Fitting problem for feature 126 a warning was issued
#> 2024-12-30 15:52:46.419443 WARNING::Fitting problem for feature 126 a warning was issued
#> 2024-12-30 15:53:36.575729 WARNING::Fitting problem for feature 50 returning NA
#> 2024-12-30 15:53:37.286582 WARNING::Fitting problem for feature 61 returning NA
#> 2024-12-30 15:53:38.09175 WARNING::Fitting problem for feature 73 returning NA
#> 2024-12-30 15:53:38.277671 WARNING::Fitting problem for feature 76 returning NA
#> 2024-12-30 15:53:38.347638 WARNING::Fitting problem for feature 77 returning NA
#> 2024-12-30 15:53:38.786315 WARNING::Fitting problem for feature 82 returning NA
#> 2024-12-30 15:53:39.831777 WARNING::Fitting problem for feature 94 returning NA
#> 2024-12-30 15:53:39.898823 WARNING::Fitting problem for feature 95 returning NA
#> 2024-12-30 15:53:40.016249 WARNING::Fitting problem for feature 97 returning NA
#> 2024-12-30 15:53:41.057229 WARNING::Fitting problem for feature 112 returning NA
#> 2024-12-30 15:53:41.093694 WARNING::Fitting problem for feature 113 returning NA
#> 2024-12-30 15:53:41.585208 WARNING::Fitting problem for feature 120 returning NA
#> 2024-12-30 15:53:41.751293 WARNING::Fitting problem for feature 123 returning NA
#> 2024-12-30 15:53:41.914026 WARNING::Fitting problem for feature 125 returning NA
#> 2024-12-30 15:53:41.983763 WARNING::Fitting problem for feature 126 returning NA
#> 2024-12-30 15:53:42.077552 WARNING::Fitting problem for feature 128 returning NA
#> 2024-12-30 15:53:42.595582 WARNING::Fitting problem for feature 135 returning NA
#> 2024-12-30 15:53:42.944172 WARNING::Fitting problem for feature 140 returning NA
#> 2024-12-30 15:53:43.032951 WARNING::Fitting problem for feature 142 returning NA
#> 2024-12-30 15:53:43.292777 WARNING::Fitting problem for feature 146 returning NA
#> 2024-12-30 15:53:43.404795 WARNING::Deleting existing residuals file: random_effects_output/fits/residuals_linear.rds
#> 2024-12-30 15:53:43.44972 WARNING::Deleting existing fitted file: random_effects_output/fits/fitted_linear.rds
#> 2024-12-30 15:53:43.483568 WARNING::Deleting existing ranef file: random_effects_output/fits/ranef_linear.rds
#> 2024-12-30 15:53:43.4907 WARNING::Deleting existing residuals file: random_effects_output/fits/residuals_logistic.rds
#> 2024-12-30 15:53:43.632626 WARNING::Deleting existing fitted file: random_effects_output/fits/fitted_logistic.rds
#> 2024-12-30 15:53:43.770538 WARNING::Deleting existing ranef file: random_effects_output/fits/ranef_logistic.rds

请注意,输出中不包含任何参与者 ID 项;随机截距仅用于控制分组。如果您有兴趣在纵向研究中测试时间的影响,则应将时间点变量作为固定效应包含在您的 MaAsLin 3 公式中。

混合效应模型由于其复杂性需要更长的时间来拟合,并且由于额外的项,拟合可能会更频繁地失败。但是,考虑到这种非独立性很重要,MaAsLin 3 仍然能够在几个小时内拟合具有数千个样本和数千个特征的复杂模型(增加使用核心的 CPU 可能会有所帮助)。但是,随机效应并不是解决所有相关数据问题的办法。特别是,当每组的观测值少于 5 个时,随机截距模型可能会产生较差的模型拟合。在这些情况下,应使用每组固定效应或对于高级用户,条件逻辑回归(请参阅手册中的 strata_effects)。例如,在治疗前后研究中,前一个样本,后一个样本,参与者 ID 和前/后指标应作为固定效应包括在内,但仅应保留前/后指标以供事后分析。

4.3 互作(Interactions)

MaAsLin 3 公式模式的优点之一是能够包含交互项。从数学上讲,交互项对应于设计矩阵中两列的乘积。当连续变量与分类项交互时,交互项对应于连续变量在类别之间的斜率变化。对于两个交互的分类变量,请参见下文;通过示例可以更好地解释。在公式中,可以使用 : 符号指定交互以仅包含交互项,或使用 * 符号指定交互以同时包含交互项和非交互项(即 a*b 将项 a、b 和 a:b 相加)。示例输入文件可以在 MaAsLin 3 源或 MaAsLin 3 教程文件存储库的 inst/extdata 文件夹中找到,输出文件可以在 MaAsLin 3 教程文件存储库中找到。

library(magrittr)
library(dplyr)
metadata <- metadata %>%
    mutate(dysbiosis_general = ifelse(dysbiosis_state != 'none',
                                    'dysbiosis', 'none')) %>%
    mutate(dysbiosis_general = factor(dysbiosis_general, levels =
                                        c('none', 'dysbiosis')))

fit_out <- maaslin3(
    input_data = taxa_table,
    input_metadata = metadata,
    output = 'interaction_output',
    formula = '~ diagnosis + diagnosis:dysbiosis_general +
        antibiotics + age + reads',
    verbosity ='WARN')
#> 2024-12-30 15:53:46.048831 WARNING::Fitting problem for feature 50 returning NA
#> 2024-12-30 15:53:46.139285 WARNING::Fitting problem for feature 62 returning NA
#> 2024-12-30 15:53:46.266724 WARNING::Fitting problem for feature 74 returning NA
#> 2024-12-30 15:53:46.306003 WARNING::Fitting problem for feature 78 returning NA
#> 2024-12-30 15:53:46.340585 WARNING::Fitting problem for feature 84 returning NA
#> 2024-12-30 15:53:46.437872 WARNING::Fitting problem for feature 96 returning NA
#> 2024-12-30 15:53:46.450031 WARNING::Fitting problem for feature 97 returning NA
#> 2024-12-30 15:53:46.474454 WARNING::Fitting problem for feature 99 returning NA
#> 2024-12-30 15:53:46.607248 WARNING::Fitting problem for feature 114 returning NA
#> 2024-12-30 15:53:46.614688 WARNING::Fitting problem for feature 115 returning NA
#> 2024-12-30 15:53:46.668128 WARNING::Fitting problem for feature 123 returning NA
#> 2024-12-30 15:53:46.712273 WARNING::Fitting problem for feature 130 returning NA
#> 2024-12-30 15:53:46.724452 WARNING::Fitting problem for feature 132 returning NA
#> 2024-12-30 15:53:46.793212 WARNING::Fitting problem for feature 139 returning NA
#> 2024-12-30 15:53:46.90794 WARNING::Fitting problem for feature 150 returning NA
#> 2024-12-30 15:54:01.13865 WARNING::Fitting problem for feature 50 returning NA
#> 2024-12-30 15:54:01.228767 WARNING::Fitting problem for feature 62 returning NA
#> 2024-12-30 15:54:01.330739 WARNING::Fitting problem for feature 74 returning NA
#> 2024-12-30 15:54:01.3775 WARNING::Fitting problem for feature 78 returning NA
#> 2024-12-30 15:54:01.416814 WARNING::Fitting problem for feature 84 returning NA
#> 2024-12-30 15:54:01.501006 WARNING::Fitting problem for feature 96 returning NA
#> 2024-12-30 15:54:01.509806 WARNING::Fitting problem for feature 97 returning NA
#> 2024-12-30 15:54:01.52856 WARNING::Fitting problem for feature 99 returning NA
#> 2024-12-30 15:54:01.650736 WARNING::Fitting problem for feature 114 returning NA
#> 2024-12-30 15:54:01.657342 WARNING::Fitting problem for feature 115 returning NA
#> 2024-12-30 15:54:01.704423 WARNING::Fitting problem for feature 123 returning NA
#> 2024-12-30 15:54:01.76664 WARNING::Fitting problem for feature 130 returning NA
#> 2024-12-30 15:54:01.782114 WARNING::Fitting problem for feature 132 returning NA
#> 2024-12-30 15:54:01.823473 WARNING::Fitting problem for feature 139 returning NA
#> 2024-12-30 15:54:01.923269 WARNING::Fitting problem for feature 150 returning NA
#> 2024-12-30 15:54:02.093446 WARNING::Deleting existing residuals file: interaction_output/fits/residuals_linear.rds
#> 2024-12-30 15:54:02.178988 WARNING::Deleting existing fitted file: interaction_output/fits/fitted_linear.rds
#> 2024-12-30 15:54:02.25832 WARNING::Deleting existing residuals file: interaction_output/fits/residuals_logistic.rds
#> 2024-12-30 15:54:02.611106 WARNING::Deleting existing fitted file: interaction_output/fits/fitted_logistic.rds

在上面的模型中,我们已将 dysbiosis_CD 和 dysbiosis_UC 转换为变量 dysbiosis_general 中的 dysbiosis,然后使用 diagnostic:dysbiosis_general 指定诊断和 dysbiosis_general 之间的交互。由于诊断本身有 3 个级别(非 IBD、UC、CD),因此每个特征将产生五个术语(名称列):

-diagnosisCD 是非 dysbiotic CD 和非 IBD 之间的差异 -diagnosisUC 是非 dysbiotic UC 和非 IBD 之间的差异 -diagnosisCD:dysbiosis_generaldysbiosis(diagnosisCD 和 dysbiosis_generaldysbiosis 的交互)是非 dysbiotic CD 和 dysbiotic CD 之间的差异 -diagnosisnonIBD:dysbiosis_generaldysbiosis(diagnosisnonIBD 和 dysbiosis_generaldysbiosis 的交互)是 dysbiotic 和非 dysbiotic non-IBD 之间的差异。请注意,这些系数均为 NA,因为没有标记为非 IBD 的受试者被标记为菌群失调。 -diagnosisUC:dysbiosis_generaldysbiosis(diagnosisUC 和 dysbiosis_generaldysbiosis 的相互作用)是非菌群失调 UC 和菌群失调 UC 之间的差异

由于我们以不同的方式有效地拟合了原始模型,因此此输出表相当于原始输出表,但在列元数据、值和基于交互项的名称中使用了新名称。

4.4 层次比对(Level contrasts)

MaAsLin 3 的另一个功能是能够使用对比测试来测试有序预测因子的水平与水平之间的差异。有序预测因子是具有自然排序的分类变量,例如癌症阶段、饮食因素的消费频率或剂量组。在这里,我们通过在公式中包含 ordered(red_meat) 来评估微生物丰度和流行率与食用红肉之间的关系。这将执行对比测试,以确定每对后续水平之间是否存在差异(例如,“昨天,3 次或更多次”与“昨天,1 到 2 次”),而不是水平与基线之间是否存在差异(例如,“昨天,3 次或更多次”与“过去 7 天内没有”)。系数、标准误差和 p 值都对应于值水平与前一个水平之间的差异。有序预测因子应仅作为固定效应包括在内(即,没有有序预测因子作为随机效应等)。示例输入文件可以在 MaAsLin 3 源或 MaAsLin 3 教程文件存储库的 inst/extdata 文件夹中找到,输出文件可以在 MaAsLin 3 教程文件存储库中找到。

如果我们查看生成的热图,我们可以发现 Alistipes shahii 流行率关联可能很有趣,因为除了一个级别与级别的比较外,其他所有级别的比较中,它的流行率都随着肉类消费的增加而增加。

# Put the red meat consumption responses in order
metadata <- metadata %>%
    mutate(red_meat = ifelse(
        red_meat == 'No, I did not consume these products in the last 7 days',
                            'Not in the last 7 days',
                            red_meat) %>%
            factor(levels = c('Not in the last 7 days',
                                'Within the past 4 to 7 days',
                                'Within the past 2 to 3 days',
                                'Yesterday, 1 to 2 times',
                                'Yesterday, 3 or more times'))
    )

# Create the model with only non-IBD subjects
fit_out <- maaslin3(
    input_data = taxa_table,
    input_metadata = metadata[metadata$diagnosis == 'nonIBD',],
    output = 'ordered_outputs',
    formula = '~ ordered(red_meat) + antibiotics + age + reads',
    plot_summary_plot = TRUE,
    plot_associations = TRUE,
    heatmap_vars = c('red_meat Within the past 4 to 7 days',
                    'red_meat Within the past 2 to 3 days',
                    'red_meat Yesterday, 1 to 2 times',
                    'red_meat Yesterday, 3 or more times'),
    max_pngs = 30,
    verbosity ='WARN')
#> 2024-12-30 15:54:17.80237 WARNING::Fitting problem for feature 33 returning NA
#> 2024-12-30 15:54:18.016872 WARNING::Fitting problem for feature 51 returning NA
#> 2024-12-30 15:54:18.07918 WARNING::Fitting problem for feature 56 returning NA
#> 2024-12-30 15:54:18.144925 WARNING::Fitting problem for feature 61 returning NA
#> 2024-12-30 15:54:18.191735 WARNING::Fitting problem for feature 64 returning NA
#> 2024-12-30 15:54:18.266852 WARNING::Fitting problem for feature 70 returning NA
#> 2024-12-30 15:54:18.274217 WARNING::Fitting problem for feature 71 returning NA
#> 2024-12-30 15:54:18.281034 WARNING::Fitting problem for feature 72 returning NA
#> 2024-12-30 15:54:18.288575 WARNING::Fitting problem for feature 73 returning NA
#> 2024-12-30 15:54:18.31018 WARNING::Fitting problem for feature 75 returning NA
#> 2024-12-30 15:54:18.31701 WARNING::Fitting problem for feature 76 returning NA
#> 2024-12-30 15:54:18.371408 WARNING::Fitting problem for feature 80 returning NA
#> 2024-12-30 15:54:18.767765 WARNING::Fitting problem for feature 106 returning NA
#> 2024-12-30 15:54:18.909998 WARNING::Fitting problem for feature 117 returning NA
#> 2024-12-30 15:54:18.948338 WARNING::Fitting problem for feature 120 returning NA
#> 2024-12-30 15:54:18.965928 WARNING::Fitting problem for feature 122 returning NA
#> 2024-12-30 15:54:19.019155 WARNING::Fitting problem for feature 127 returning NA
#> 2024-12-30 15:54:19.096089 WARNING::Fitting problem for feature 135 returning NA
#> 2024-12-30 15:54:19.104478 WARNING::Fitting problem for feature 137 returning NA
#> 2024-12-30 15:54:19.13408 WARNING::Fitting problem for feature 140 returning NA
#> 2024-12-30 15:54:30.084696 WARNING::Fitting problem for feature 33 returning NA
#> 2024-12-30 15:54:30.367603 WARNING::Fitting problem for feature 51 returning NA
#> 2024-12-30 15:54:30.442599 WARNING::Fitting problem for feature 56 returning NA
#> 2024-12-30 15:54:30.494363 WARNING::Fitting problem for feature 61 returning NA
#> 2024-12-30 15:54:30.528086 WARNING::Fitting problem for feature 64 returning NA
#> 2024-12-30 15:54:30.599764 WARNING::Fitting problem for feature 70 returning NA
#> 2024-12-30 15:54:30.60759 WARNING::Fitting problem for feature 71 returning NA
#> 2024-12-30 15:54:30.61438 WARNING::Fitting problem for feature 72 returning NA
#> 2024-12-30 15:54:30.620874 WARNING::Fitting problem for feature 73 returning NA
#> 2024-12-30 15:54:30.644576 WARNING::Fitting problem for feature 75 returning NA
#> 2024-12-30 15:54:30.650826 WARNING::Fitting problem for feature 76 returning NA
#> 2024-12-30 15:54:30.695642 WARNING::Fitting problem for feature 80 returning NA
#> 2024-12-30 15:54:31.129585 WARNING::Fitting problem for feature 106 returning NA
#> 2024-12-30 15:54:31.296024 WARNING::Fitting problem for feature 117 returning NA
#> 2024-12-30 15:54:31.328678 WARNING::Fitting problem for feature 120 returning NA
#> 2024-12-30 15:54:31.353818 WARNING::Fitting problem for feature 122 returning NA
#> 2024-12-30 15:54:31.4142 WARNING::Fitting problem for feature 127 returning NA
#> 2024-12-30 15:54:31.491624 WARNING::Fitting problem for feature 135 returning NA
#> 2024-12-30 15:54:31.500954 WARNING::Fitting problem for feature 137 returning NA
#> 2024-12-30 15:54:31.540783 WARNING::Fitting problem for feature 140 returning NA
#> 2024-12-30 15:54:31.683032 WARNING::Deleting existing residuals file: ordered_outputs/fits/residuals_linear.rds
#> 2024-12-30 15:54:31.707219 WARNING::Deleting existing fitted file: ordered_outputs/fits/fitted_linear.rds
#> 2024-12-30 15:54:31.725614 WARNING::Deleting existing residuals file: ordered_outputs/fits/residuals_logistic.rds
#> 2024-12-30 15:54:31.789589 WARNING::Deleting existing fitted file: ordered_outputs/fits/fitted_logistic.rds

4.5 组间差异(Group-wise differences)

这里重点介绍的 MaAsLin 3 的最后一个功能是能够使用 ANOVA 或类似 ANOVA 的程序来测试分类预测因子的分组差异。分组预测因子是具有或不具有排序的分类变量,例如种族、国家或饮食因素的消费频率。在进行分组差异测试时,我们不会比较任何两个特定的级别;相反,我们会调查所有级别的丰度和流行率是否相同。因此,不会返回任何系数,只会返回 p 值。在这里,我们通过包括 group(red_meat) 来测试不同红肉消费水平的人群中微生物丰度和流行率是否存在差异。分组预测因子应仅作为固定效应(即,没有作为随机效应的分组预测因子等)包含在内。示例输入文件可以在 MaAsLin 3 源或 MaAsLin 3 教程文件存储库的 inst/extdata 文件夹中找到,输出文件可以在 MaAsLin 3 教程文件存储库中找到。

如果我们查看之前的相同 Alistipes shahii 关联,我们会发现组预测器没有返回系数或标准误差,但 q 值非常低。这证实了之前的观察结果,即 Alistipes shahii 的流行程度与红肉消费量存在差异。

fit_out <- maaslin3(
    input_data = taxa_table,
    input_metadata = metadata[metadata$diagnosis == 'nonIBD',],
    output = 'group_outputs',
    formula = '~ group(red_meat) + antibiotics + age + reads',
    plot_summary_plot = TRUE,
    plot_associations = TRUE,
    heatmap_vars = c('red_meat Within the past 4 to 7 days',
                    'red_meat Within the past 2 to 3 days',
                    'red_meat Yesterday, 1 to 2 times',
                    'red_meat Yesterday, 3 or more times'),
    max_pngs = 200,
    verbosity ='WARN')
#> 2024-12-30 15:54:47.45733 WARNING::Fitting problem for feature 33 returning NA
#> 2024-12-30 15:54:47.583894 WARNING::Fitting problem for feature 51 returning NA
#> 2024-12-30 15:54:47.619131 WARNING::Fitting problem for feature 56 returning NA
#> 2024-12-30 15:54:47.664549 WARNING::Fitting problem for feature 61 returning NA
#> 2024-12-30 15:54:47.700457 WARNING::Fitting problem for feature 64 returning NA
#> 2024-12-30 15:54:47.748919 WARNING::Fitting problem for feature 70 returning NA
#> 2024-12-30 15:54:47.764201 WARNING::Fitting problem for feature 71 returning NA
#> 2024-12-30 15:54:47.779782 WARNING::Fitting problem for feature 72 returning NA
#> 2024-12-30 15:54:47.819568 WARNING::Fitting problem for feature 73 returning NA
#> 2024-12-30 15:54:47.856163 WARNING::Fitting problem for feature 75 returning NA
#> 2024-12-30 15:54:47.873695 WARNING::Fitting problem for feature 76 returning NA
#> 2024-12-30 15:54:47.956695 WARNING::Fitting problem for feature 80 returning NA
#> 2024-12-30 15:54:48.367099 WARNING::Fitting problem for feature 106 returning NA
#> 2024-12-30 15:54:48.479952 WARNING::Fitting problem for feature 117 returning NA
#> 2024-12-30 15:54:48.502311 WARNING::Fitting problem for feature 120 returning NA
#> 2024-12-30 15:54:48.521298 WARNING::Fitting problem for feature 122 returning NA
#> 2024-12-30 15:54:48.572752 WARNING::Fitting problem for feature 127 returning NA
#> 2024-12-30 15:54:48.653997 WARNING::Fitting problem for feature 135 returning NA
#> 2024-12-30 15:54:48.672069 WARNING::Fitting problem for feature 137 returning NA
#> 2024-12-30 15:54:48.706131 WARNING::Fitting problem for feature 140 returning NA
#> 2024-12-30 15:54:56.998592 WARNING::Fitting problem for feature 33 returning NA
#> 2024-12-30 15:54:57.150962 WARNING::Fitting problem for feature 51 returning NA
#> 2024-12-30 15:54:57.208786 WARNING::Fitting problem for feature 56 returning NA
#> 2024-12-30 15:54:57.244971 WARNING::Fitting problem for feature 61 returning NA
#> 2024-12-30 15:54:57.266597 WARNING::Fitting problem for feature 64 returning NA
#> 2024-12-30 15:54:57.299404 WARNING::Fitting problem for feature 70 returning NA
#> 2024-12-30 15:54:57.306817 WARNING::Fitting problem for feature 71 returning NA
#> 2024-12-30 15:54:57.31533 WARNING::Fitting problem for feature 72 returning NA
#> 2024-12-30 15:54:57.32496 WARNING::Fitting problem for feature 73 returning NA
#> 2024-12-30 15:54:57.340536 WARNING::Fitting problem for feature 75 returning NA
#> 2024-12-30 15:54:57.346734 WARNING::Fitting problem for feature 76 returning NA
#> 2024-12-30 15:54:57.39804 WARNING::Fitting problem for feature 80 returning NA
#> 2024-12-30 15:54:57.587345 WARNING::Fitting problem for feature 106 returning NA
#> 2024-12-30 15:54:57.69699 WARNING::Fitting problem for feature 117 returning NA
#> 2024-12-30 15:54:57.715764 WARNING::Fitting problem for feature 120 returning NA
#> 2024-12-30 15:54:57.734336 WARNING::Fitting problem for feature 122 returning NA
#> 2024-12-30 15:54:57.781039 WARNING::Fitting problem for feature 127 returning NA
#> 2024-12-30 15:54:57.84657 WARNING::Fitting problem for feature 135 returning NA
#> 2024-12-30 15:54:57.857887 WARNING::Fitting problem for feature 137 returning NA
#> 2024-12-30 15:54:57.877879 WARNING::Fitting problem for feature 140 returning NA
#> 2024-12-30 15:54:57.975564 WARNING::Deleting existing residuals file: group_outputs/fits/residuals_linear.rds
#> 2024-12-30 15:54:57.998339 WARNING::Deleting existing fitted file: group_outputs/fits/fitted_linear.rds
#> 2024-12-30 15:54:58.017996 WARNING::Deleting existing residuals file: group_outputs/fits/residuals_logistic.rds
#> 2024-12-30 15:54:58.08533 WARNING::Deleting existing fitted file: group_outputs/fits/fitted_logistic.rds

4.6 对比测试(Contrast tests)

我们还可以在 MaAsLin 3 中执行对比测试,以检查系数的线性组合是否与右侧大小 (RHS) 上的某个常数有显著差异。例如,我们可以通过测试对比 β1−β2 = 0 来测试两个系数是否显著不同。对比矩阵的列名应与系数名称匹配,行应与感兴趣的对比相匹配。对于每一行 CT,将测试假设 H0:CTβ→=RHS。请注意,在原始拟合中,save_models 必须为 TRUE 才能执行对比测试。如果未指定 RHS,则将执行中位数测试,并返回中位数测试 RHS。

下面我们测试一下UC和CD的诊断系数是否相同,以及UC和CD的菌群失调系数是否相同。

# Fit with save_models = TRUE
fit_out <- maaslin3(input_data = taxa_table,
                    input_metadata = metadata,
                    output = 'contrast_test_output',
                    formula = '~ diagnosis + dysbiosis_state +
                        antibiotics + age + reads',
                    plot_summary_plot = FALSE,
                    plot_associations = FALSE,
                    cores = 1,
                    save_models = TRUE,
                    verbosity ='WARN')
#> 2024-12-30 15:55:46.402165 WARNING::Fitting problem for feature 50 returning NA
#> 2024-12-30 15:55:46.459658 WARNING::Fitting problem for feature 62 returning NA
#> 2024-12-30 15:55:46.519812 WARNING::Fitting problem for feature 74 returning NA
#> 2024-12-30 15:55:46.539949 WARNING::Fitting problem for feature 78 returning NA
#> 2024-12-30 15:55:46.651216 WARNING::Fitting problem for feature 84 returning NA
#> 2024-12-30 15:55:46.714957 WARNING::Fitting problem for feature 96 returning NA
#> 2024-12-30 15:55:46.72098 WARNING::Fitting problem for feature 97 returning NA
#> 2024-12-30 15:55:46.733619 WARNING::Fitting problem for feature 99 returning NA
#> 2024-12-30 15:55:46.813821 WARNING::Fitting problem for feature 114 returning NA
#> 2024-12-30 15:55:46.819765 WARNING::Fitting problem for feature 115 returning NA
#> 2024-12-30 15:55:46.859853 WARNING::Fitting problem for feature 123 returning NA
#> 2024-12-30 15:55:46.890347 WARNING::Fitting problem for feature 130 returning NA
#> 2024-12-30 15:55:46.901039 WARNING::Fitting problem for feature 132 returning NA
#> 2024-12-30 15:55:46.932261 WARNING::Fitting problem for feature 139 returning NA
#> 2024-12-30 15:55:46.985415 WARNING::Fitting problem for feature 150 returning NA
#> 2024-12-30 15:55:54.8752 WARNING::Fitting problem for feature 50 returning NA
#> 2024-12-30 15:55:54.929414 WARNING::Fitting problem for feature 62 returning NA
#> 2024-12-30 15:55:54.98084 WARNING::Fitting problem for feature 74 returning NA
#> 2024-12-30 15:55:54.997962 WARNING::Fitting problem for feature 78 returning NA
#> 2024-12-30 15:55:55.02217 WARNING::Fitting problem for feature 84 returning NA
#> 2024-12-30 15:55:55.072864 WARNING::Fitting problem for feature 96 returning NA
#> 2024-12-30 15:55:55.077867 WARNING::Fitting problem for feature 97 returning NA
#> 2024-12-30 15:55:55.087958 WARNING::Fitting problem for feature 99 returning NA
#> 2024-12-30 15:55:55.153334 WARNING::Fitting problem for feature 114 returning NA
#> 2024-12-30 15:55:55.159056 WARNING::Fitting problem for feature 115 returning NA
#> 2024-12-30 15:55:55.196663 WARNING::Fitting problem for feature 123 returning NA
#> 2024-12-30 15:55:55.229446 WARNING::Fitting problem for feature 130 returning NA
#> 2024-12-30 15:55:55.241317 WARNING::Fitting problem for feature 132 returning NA
#> 2024-12-30 15:55:55.272239 WARNING::Fitting problem for feature 139 returning NA
#> 2024-12-30 15:55:55.370232 WARNING::Fitting problem for feature 150 returning NA
#> 2024-12-30 15:55:55.474159 WARNING::Deleting existing model objects file: contrast_test_output/fits/models_linear.rds
#> 2024-12-30 15:57:32.328322 WARNING::Deleting existing residuals file: contrast_test_output/fits/residuals_linear.rds
#> 2024-12-30 15:57:32.413456 WARNING::Deleting existing fitted file: contrast_test_output/fits/fitted_linear.rds
#> 2024-12-30 15:57:32.451255 WARNING::Deleting existing model objects file: contrast_test_output/fits/models_logistic.rds
#> 2024-12-30 15:59:17.896186 WARNING::Deleting existing residuals file: contrast_test_output/fits/residuals_logistic.rds
#> 2024-12-30 15:59:18.358037 WARNING::Deleting existing fitted file: contrast_test_output/fits/fitted_logistic.rds

contrast_mat <- matrix(c(1, -1, 0, 0, 0, 0, 1, -1), 
    ncol = 4, nrow = 2, byrow = TRUE)
    
colnames(contrast_mat) <- c("diagnosisUC",
                            "diagnosisCD",
                            "dysbiosis_statedysbiosis_UC",
                            "dysbiosis_statedysbiosis_CD")
                            
rownames(contrast_mat) <- c("diagnosis_test", "dysbiosis_test")

contrast_mat
#>                diagnosisUC diagnosisCD dysbiosis_statedysbiosis_UC
#> diagnosis_test           1          -1                           0
#> dysbiosis_test           0           0                           1
#>                dysbiosis_statedysbiosis_CD
#> diagnosis_test                           0
#> dysbiosis_test                          -1

contrast_out <- maaslin_contrast_test(fits = fit_out$fit_data_abundance$fits,
                        contrast_mat = contrast_mat)

contrast_out %>%
    knitr::kable() %>%
    kableExtra::kable_styling("striped", position = 'center') %>%
    kableExtra::scroll_box(width = "800px", height = "400px")
feature test coef rhs stderr pval_individual error model
Phocaeicola_vulgatus diagnosis_test 0.1089748 0.1089748 0.2443056 1.0000000 NA abundance
Phocaeicola_vulgatus dysbiosis_test 0.3658063 0.3961750 0.9026559 0.9731665 NA abundance
Faecalibacterium_prausnitzii diagnosis_test 0.3506263 0.5314281 0.1259597 0.1514037 NA abundance
Faecalibacterium_prausnitzii dysbiosis_test 2.2499071 3.8113129 0.4748916 0.0010350 NA abundance
Bacteroides_uniformis diagnosis_test -0.1714861 0.0638654 0.1709981 0.1689658 NA abundance
Bacteroides_uniformis dysbiosis_test 2.4290291 4.2899436 0.6875146 0.0068886 NA abundance
Prevotella_copri_clade_A diagnosis_test 1.9979479 3.8645820 0.7520264 0.0136440 NA abundance
Prevotella_copri_clade_A dysbiosis_test 0.8652342 1.3329966 2.6151949 0.8581739 NA abundance
Bacteroides_stercoris diagnosis_test 0.1819607 0.2510416 0.2750066 0.8017247 NA abundance
Bacteroides_stercoris dysbiosis_test 2.9598746 5.4752280 1.4948726 0.0928237 NA abundance
Phocaeicola_dorei diagnosis_test 0.6128319 1.1078530 0.4890767 0.3117859 NA abundance
Phocaeicola_dorei dysbiosis_test 0.3971967 0.3971967 1.6972670 1.0000000 NA abundance
Bacteroides_ovatus diagnosis_test 0.6408062 1.0927675 0.1844777 0.0144335 NA abundance
Bacteroides_ovatus dysbiosis_test 1.3045581 2.1732593 0.8593975 0.3123092 NA abundance
Bacteroides_fragilis diagnosis_test -0.3317458 0.0759081 0.2672160 0.1275254 NA abundance
Bacteroides_fragilis dysbiosis_test -0.1072644 0.3718279 0.7859776 0.5423380 NA abundance
Eubacterium_rectale diagnosis_test 0.3292258 0.5142113 0.1685224 0.2725590 NA abundance
Eubacterium_rectale dysbiosis_test 1.8318224 3.1830901 0.8070358 0.0943200 NA abundance
Alistipes_putredinis diagnosis_test -0.8184856 0.0034837 0.2225484 0.0002351 NA abundance
Alistipes_putredinis dysbiosis_test 2.6075856 4.7736494 1.3397762 0.1063000 NA abundance
Bacteroides_caccae diagnosis_test -0.0046124 0.0909017 0.1792886 0.5943387 NA abundance
Bacteroides_caccae dysbiosis_test 1.7881702 3.1128956 0.8844336 0.1345113 NA abundance
Parabacteroides_distasonis diagnosis_test -0.1116413 0.0641633 0.1466065 0.2307166 NA abundance
Parabacteroides_distasonis dysbiosis_test -0.4579341 0.3442818 0.7463680 0.2826816 NA abundance
Bacteroides_xylanisolvens diagnosis_test -2.4403106 -0.0575910 0.2968232 0.0000000 NA abundance
Bacteroides_xylanisolvens dysbiosis_test 2.2835442 4.1259030 1.2648454 0.1455602 NA abundance
Roseburia_faecis diagnosis_test 0.4230795 0.7093823 0.2404127 0.2340097 NA abundance
Roseburia_faecis dysbiosis_test 0.5216206 0.6423996 0.9480970 0.8986590 NA abundance
Bacteroides_thetaiotaomicron diagnosis_test -0.0559645 0.0961947 0.2395141 0.5253820 NA abundance
Bacteroides_thetaiotaomicron dysbiosis_test -1.8925449 0.3100305 1.0033334 0.0283626 NA abundance
Roseburia_intestinalis diagnosis_test 0.2335209 0.3515706 0.2770450 0.6701426 NA abundance
Roseburia_intestinalis dysbiosis_test -0.0268120 0.3724156 0.8404776 0.6349107 NA abundance
Phocaeicola_massiliensis diagnosis_test -0.6912104 0.0770234 0.3870910 0.0478892 NA abundance
Phocaeicola_massiliensis dysbiosis_test 3.9645449 7.4987793 2.0319409 0.0827682 NA abundance
Alistipes_onderdonkii diagnosis_test -0.9337859 0.0230016 0.2608339 0.0002600 NA abundance
Alistipes_onderdonkii dysbiosis_test 3.7895508 7.1744700 2.8765295 0.2396406 NA abundance
Parabacteroides_merdae diagnosis_test -0.0674499 0.0854162 0.1862793 0.4120970 NA abundance
Parabacteroides_merdae dysbiosis_test 0.2775663 0.3950772 1.1023032 0.9151286 NA abundance
Akkermansia_muciniphila diagnosis_test 0.5122169 0.9085053 0.4642975 0.3938817 NA abundance
Akkermansia_muciniphila dysbiosis_test 0.6145821 0.8321622 2.3747284 0.9270434 NA abundance
Escherichia_coli diagnosis_test -0.0089708 0.1015299 0.3102036 0.7217834 NA abundance
Escherichia_coli dysbiosis_test -2.8138190 0.1445334 0.7262272 0.0000516 NA abundance
Bacteroides_eggerthii diagnosis_test 2.1393846 4.1404706 0.6608753 0.0026214 NA abundance
Bacteroides_eggerthii dysbiosis_test 1.9707743 3.5463924 4.0591518 0.6981004 NA abundance
Sutterella_wadsworthensis diagnosis_test -0.4995621 0.0411716 0.2196002 0.0141211 NA abundance
Sutterella_wadsworthensis dysbiosis_test -1.5032161 0.3213211 1.0252053 0.0757034 NA abundance
Dialister_invisus diagnosis_test -0.7186584 0.0119783 0.2187649 0.0008816 NA abundance
Dialister_invisus dysbiosis_test 0.4251818 0.4512796 0.6682809 0.9688597 NA abundance
Bacteroides_faecis diagnosis_test 0.6168019 1.1155842 0.4860192 0.3053512 NA abundance
Bacteroides_faecis dysbiosis_test 9.7878623 19.0783524 2.0386351 0.0000068 NA abundance
Bacteroides_cellulosilyticus diagnosis_test -1.2287327 0.0512626 0.3707219 0.0006106 NA abundance
Bacteroides_cellulosilyticus dysbiosis_test 7.0002018 13.5049328 1.8108308 0.0003663 NA abundance
Lachnospira_eligens diagnosis_test 0.4424994 0.7394413 0.2161553 0.1698555 NA abundance
Lachnospira_eligens dysbiosis_test 0.4743359 0.5493836 0.9235968 0.9352561 NA abundance
Faecalibacterium_SGB15346 diagnosis_test 0.5333782 0.9222563 0.2495015 0.1195167 NA abundance
Faecalibacterium_SGB15346 dysbiosis_test 2.7522458 5.0410768 1.1559071 0.0480629 NA abundance
Eubacterium_siraeum diagnosis_test 0.1098508 0.1107060 0.3734672 0.9981737 NA abundance
Eubacterium_siraeum dysbiosis_test 0.9419210 1.4863784 2.3559934 0.8173262 NA abundance
Barnesiella_intestinihominis diagnosis_test -0.7897116 0.0569208 0.3271875 0.0099970 NA abundance
Barnesiella_intestinihominis dysbiosis_test 0.5264000 0.6554764 2.0721511 0.9503605 NA abundance
Alistipes_finegoldii diagnosis_test -0.7838455 0.0392441 0.2764543 0.0030194 NA abundance
Alistipes_finegoldii dysbiosis_test 7.5580475 14.6762495 2.6525567 0.0074761 NA abundance
Phascolarctobacterium_faecium diagnosis_test -0.7691593 0.0400289 0.2743911 0.0033385 NA abundance
Phascolarctobacterium_faecium dysbiosis_test 0.3976564 0.3981129 1.4799338 0.9997540 NA abundance
Prevotella_sp_885 diagnosis_test -1.5158048 0.1056383 1.1747803 0.1725595 NA abundance
Prevotella_sp_885 dysbiosis_test 5.9454619 11.4951642 4.6384248 0.2361458 NA abundance
Flavonifractor_plautii diagnosis_test 0.0541276 0.1013658 0.1726796 0.7844692 NA abundance
Flavonifractor_plautii dysbiosis_test -0.1863732 0.3391785 0.5720633 0.3584373 NA abundance
Lachnospira_pectinoschiza diagnosis_test 0.4793911 0.8286415 0.2965085 0.2394153 NA abundance
Lachnospira_pectinoschiza dysbiosis_test -1.4529188 0.3185487 0.9931873 0.0751019 NA abundance
Veillonella_parvula diagnosis_test -0.6526837 0.0738761 0.3601632 0.0441587 NA abundance
Veillonella_parvula dysbiosis_test -4.0265981 0.2162533 1.0180798 0.0000359 NA abundance
Enterocloster_bolteae diagnosis_test -0.7711081 0.0168705 0.2273752 0.0005554 NA abundance
Enterocloster_bolteae dysbiosis_test -1.4956302 0.2348014 0.6734355 0.0103507 NA abundance
Dysosmobacter_welbionis diagnosis_test 0.6075329 1.0023576 0.1490768 0.0081934 NA abundance
Dysosmobacter_welbionis dysbiosis_test -0.3301336 0.3392010 0.6537350 0.3061097 NA abundance
Candidatus_Cibionibacter_quicibialis diagnosis_test 0.4761016 0.8024825 0.2126926 0.1252439 NA abundance
Candidatus_Cibionibacter_quicibialis dysbiosis_test -1.4390087 0.3167190 0.9745121 0.0719263 NA abundance
Firmicutes_bacterium_AF16_15 diagnosis_test -0.5187086 0.0531094 0.2510983 0.0230273 NA abundance
Firmicutes_bacterium_AF16_15 dysbiosis_test 1.4677322 2.5211002 1.2246761 0.3899748 NA abundance
Ruminococcus_bicirculans diagnosis_test -0.3655581 0.0716339 0.2618371 0.0954439 NA abundance
Ruminococcus_bicirculans dysbiosis_test 0.1560132 0.3883592 0.8631275 0.7878657 NA abundance
Clostridium_sp_AF34_10BH diagnosis_test 0.1207676 0.1315669 0.2266948 0.9620145 NA abundance
Clostridium_sp_AF34_10BH dysbiosis_test 1.2199081 2.0222988 1.0398631 0.4405244 NA abundance
Odoribacter_splanchnicus diagnosis_test -1.1375734 -0.0868128 0.1802169 0.0000000 NA abundance
Odoribacter_splanchnicus dysbiosis_test 1.5091315 2.6049330 1.3261384 0.4088914 NA abundance
Alistipes_shahii diagnosis_test -0.3767165 0.0527467 0.2165436 0.0477489 NA abundance
Alistipes_shahii dysbiosis_test 4.0055597 7.5567985 1.6048828 0.0272523 NA abundance
Ruminococcus_bromii diagnosis_test 0.6049633 1.0820867 0.3607733 0.1867190 NA abundance
Ruminococcus_bromii dysbiosis_test 0.4919755 0.5864991 1.8940378 0.9602210 NA abundance
Bacteroides_finegoldii diagnosis_test 1.4909930 2.8368989 0.4978991 0.0072293 NA abundance
Bacteroides_finegoldii dysbiosis_test -7.0716994 0.3720556 3.6598469 0.0427737 NA abundance
Anaerostipes_hadrus diagnosis_test 0.3726447 0.5948694 0.1731898 0.1997126 NA abundance
Anaerostipes_hadrus dysbiosis_test -0.7183829 0.3065420 0.6754139 0.1294286 NA abundance
Prevotella_copri_clade_B diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Prevotella_copri_clade_B dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Roseburia_inulinivorans diagnosis_test 0.1096488 0.1102558 0.2043603 0.9976307 NA abundance
Roseburia_inulinivorans dysbiosis_test -0.3166847 0.3680735 0.8893137 0.4415016 NA abundance
Prevotella_marseillensis diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Prevotella_marseillensis dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Bacteroides_caecigallinarum diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Bacteroides_caecigallinarum dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Phocaeicola_coprocola diagnosis_test -0.4351751 0.1073399 0.7406236 0.4656989 NA abundance
Phocaeicola_coprocola dysbiosis_test 6.2381710 12.0664991 3.6756995 0.1162161 NA abundance
Fusicatenibacter_saccharivorans diagnosis_test 0.3522363 0.5579307 0.1746687 0.2391979 NA abundance
Fusicatenibacter_saccharivorans dysbiosis_test 1.0086370 1.5859076 0.7574074 0.4461223 NA abundance
Ruminococcus_gnavus diagnosis_test -0.5466936 0.0517392 0.2549856 0.0191850 NA abundance
Ruminococcus_gnavus dysbiosis_test -0.8012727 0.2856971 0.6363604 0.0880259 NA abundance
Dysosmobacter_sp_BX15 diagnosis_test -0.8551852 -0.0041586 0.2176687 0.0001027 NA abundance
Dysosmobacter_sp_BX15 dysbiosis_test 1.9772607 3.5216830 1.2486843 0.2166202 NA abundance
Faecalibacterium_SGB15315 diagnosis_test -0.3804162 0.0833377 0.3237315 0.1525046 NA abundance
Faecalibacterium_SGB15315 dysbiosis_test 1.5901248 2.7798066 1.9259877 0.5370035 NA abundance
Alistipes_SGB2313 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Alistipes_SGB2313 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Ruminococcus_torques diagnosis_test -0.3040873 0.0513664 0.1938459 0.0669735 NA abundance
Ruminococcus_torques dysbiosis_test 0.5799845 0.7540072 0.7651954 0.8201380 NA abundance
Waltera_intestinalis diagnosis_test 0.0770540 0.1081850 0.3654790 0.9321525 NA abundance
Waltera_intestinalis dysbiosis_test 2.7668130 5.1293458 2.4955471 0.3442351 NA abundance
Blautia_wexlerae diagnosis_test -0.1153209 0.0727565 0.1683020 0.2639884 NA abundance
Blautia_wexlerae dysbiosis_test -0.4093151 0.3180040 0.6039223 0.2286840 NA abundance
Phocaeicola_plebeius diagnosis_test 0.2380953 0.3668289 0.6630320 0.8463824 NA abundance
Phocaeicola_plebeius dysbiosis_test 4.8554142 9.3028180 3.1637674 0.1624098 NA abundance
Ruminococcus_sp_BSD2780120874_150323_B10 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Ruminococcus_sp_BSD2780120874_150323_B10 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Oscillibacter_sp_ER4 diagnosis_test -0.2079693 0.0869135 0.2710622 0.2772310 NA abundance
Oscillibacter_sp_ER4 dysbiosis_test 0.1651153 0.3964085 1.7411632 0.8943806 NA abundance
Parasutterella_excrementihominis diagnosis_test -0.3737144 0.0672846 0.2483483 0.0762178 NA abundance
Parasutterella_excrementihominis dysbiosis_test 0.8131597 1.2217238 1.1594328 0.7246587 NA abundance
Acidaminococcus_intestini diagnosis_test 1.3342351 2.5318154 0.5262244 0.0241443 NA abundance
Acidaminococcus_intestini dysbiosis_test -0.2565243 0.3956041 1.9821664 0.7425746 NA abundance
Veillonella_dispar diagnosis_test 0.4828662 0.8414945 0.3480561 0.3033149 NA abundance
Veillonella_dispar dysbiosis_test -0.3427006 0.3631164 0.8640959 0.4144027 NA abundance
Klebsiella_pneumoniae diagnosis_test -0.4289910 0.1072345 0.8341480 0.5216522 NA abundance
Klebsiella_pneumoniae dysbiosis_test 0.5758331 0.7537413 1.5825152 0.9106926 NA abundance
GGB3746_SGB5089 diagnosis_test 0.7990253 1.4323587 0.2724478 0.0204036 NA abundance
GGB3746_SGB5089 dysbiosis_test 0.1396503 0.3883627 0.8879046 0.7794820 NA abundance
GGB1266_SGB1699 diagnosis_test 0.2934910 0.4777785 0.7670290 0.8107745 NA abundance
GGB1266_SGB1699 dysbiosis_test 2.2257751 4.0562133 3.1283291 0.5602024 NA abundance
Dorea_longicatena diagnosis_test 0.6009815 1.0126757 0.1726308 0.0172706 NA abundance
Dorea_longicatena dysbiosis_test -0.8805480 0.2847505 0.6692252 0.0819410 NA abundance
GGB1543_SGB2126 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB1543_SGB2126 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Coprococcus_eutactus diagnosis_test 2.7183981 5.2850418 0.6196658 0.0000543 NA abundance
Coprococcus_eutactus dysbiosis_test 1.2825721 2.1692573 2.8732724 0.7580076 NA abundance
Paraprevotella_clara diagnosis_test -0.4408974 0.1071055 0.7004147 0.4350693 NA abundance
Paraprevotella_clara dysbiosis_test 3.7121452 7.0269681 3.3659803 0.3261210 NA abundance
Prevotella_copri_clade_E diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Prevotella_copri_clade_E dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB3278_SGB4328 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB3278_SGB4328 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Roseburia_hominis diagnosis_test 0.4108302 0.6850911 0.2297041 0.2328139 NA abundance
Roseburia_hominis dysbiosis_test 0.0196432 0.3795379 0.9517669 0.7054241 NA abundance
Prevotella_copri_clade_C diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Prevotella_copri_clade_C dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB1680_SGB2312 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB1680_SGB2312 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Bacteroides_ilei diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Bacteroides_ilei dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB3277_SGB4327 diagnosis_test 0.7680017 1.4168617 0.5225786 0.2163842 NA abundance
GGB3277_SGB4327 dysbiosis_test 0.6221321 0.8452604 1.5098308 0.8827202 NA abundance
Clostridium_sp_AF36_4 diagnosis_test -0.2620548 0.0761122 0.2422648 0.1633108 NA abundance
Clostridium_sp_AF36_4 dysbiosis_test 0.2524364 0.3948026 1.1436295 0.9009749 NA abundance
Clostridium_fessum diagnosis_test -0.6570723 -0.0011041 0.1883810 0.0005209 NA abundance
Clostridium_fessum dysbiosis_test 2.4248913 4.3781760 1.0673810 0.0675772 NA abundance
Lacrimispora_amygdalina diagnosis_test 0.3958014 0.6420225 0.1848551 0.1832248 NA abundance
Lacrimispora_amygdalina dysbiosis_test -2.1910646 0.2386545 0.8195866 0.0031151 NA abundance
Akkermansia_sp_KLE1798 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Akkermansia_sp_KLE1798 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Bifidobacterium_longum diagnosis_test -0.6054266 0.0356664 0.2324094 0.0059343 NA abundance
Bifidobacterium_longum dysbiosis_test -0.0495956 0.3732538 0.9075854 0.6414043 NA abundance
Clostridiales_bacterium diagnosis_test 0.7410207 1.2844504 0.1925155 0.0048575 NA abundance
Clostridiales_bacterium dysbiosis_test -0.6000199 0.3555105 0.9055546 0.2916002 NA abundance
Clostridiaceae_bacterium diagnosis_test 0.0939331 0.1068657 0.1731836 0.9404864 NA abundance
Clostridiaceae_bacterium dysbiosis_test 0.2161187 0.3875225 0.7333262 0.8152343 NA abundance
Clostridium_sp_AM22_11AC diagnosis_test -0.3790492 0.0627815 0.2378442 0.0636260 NA abundance
Clostridium_sp_AM22_11AC dysbiosis_test 2.3142159 4.1665675 1.0574498 0.0802472 NA abundance
GGB9708_SGB15234 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB9708_SGB15234 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Bifidobacterium_adolescentis diagnosis_test 1.8824134 3.5737466 0.3667912 0.0000053 NA abundance
Bifidobacterium_adolescentis dysbiosis_test -1.8989761 0.3780482 1.7871030 0.2033191 NA abundance
Alistipes_dispar diagnosis_test 0.3621600 0.6155677 0.7996698 0.7522073 NA abundance
Alistipes_dispar dysbiosis_test 5.9511336 11.4675742 2.4054194 0.0246316 NA abundance
Enterocloster_clostridioformis diagnosis_test -2.7495169 0.0099366 0.4500242 0.0000000 NA abundance
Enterocloster_clostridioformis dysbiosis_test -1.2820209 0.3777654 1.5272229 0.2779860 NA abundance
Eisenbergiella_massiliensis diagnosis_test -0.0536367 0.1048820 0.3835225 0.6795865 NA abundance
Eisenbergiella_massiliensis dysbiosis_test 0.1794356 0.3946700 1.2797856 0.8665248 NA abundance
Eubacterium_ventriosum diagnosis_test 0.1011118 0.1086086 0.2884986 0.9792789 NA abundance
Eubacterium_ventriosum dysbiosis_test 1.4421506 2.4783238 1.5857484 0.5137734 NA abundance
Lachnospira_sp_NSJ_43 diagnosis_test -0.3836539 0.0992450 0.4847281 0.3199765 NA abundance
Lachnospira_sp_NSJ_43 dysbiosis_test 3.9782186 7.5354775 2.3878328 0.1373859 NA abundance
Prevotella_stercorea diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Prevotella_stercorea dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB9342_SGB14306 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB9342_SGB14306 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Hungatella_hathewayi diagnosis_test -0.1810285 0.1011317 0.3752259 0.4524659 NA abundance
Hungatella_hathewayi dysbiosis_test -0.6157810 0.3593079 0.9536544 0.3071136 NA abundance
GGB781_SGB1024 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB781_SGB1024 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Blautia_obeum diagnosis_test 0.6611911 1.1459987 0.2104361 0.0214619 NA abundance
Blautia_obeum dysbiosis_test 0.6089869 0.8116405 0.8465216 0.8108538 NA abundance
Haemophilus_parainfluenzae diagnosis_test 0.5029968 0.8692191 0.2677770 0.1718864 NA abundance
Haemophilus_parainfluenzae dysbiosis_test -0.4277925 0.3464520 0.7544193 0.3051328 NA abundance
Blautia_faecis diagnosis_test 0.5791862 0.9750303 0.1776250 0.0260431 NA abundance
Blautia_faecis dysbiosis_test -0.1604798 0.3556347 0.6791422 0.4474445 NA abundance
Bilophila_wadsworthia diagnosis_test 0.5889126 1.0149375 0.2214478 0.0547528 NA abundance
Bilophila_wadsworthia dysbiosis_test 0.3730813 0.3971675 2.3426648 0.9917994 NA abundance
Clostridium_leptum diagnosis_test 0.7718853 1.3816544 0.2673607 0.0228921 NA abundance
Clostridium_leptum dysbiosis_test 0.8256240 1.2510461 1.4990558 0.7766599 NA abundance
Parasutterella_SGB9260 diagnosis_test -0.2431531 0.0893592 0.3082707 0.2817451 NA abundance
Parasutterella_SGB9260 dysbiosis_test 2.5239327 4.6254605 1.6259648 0.1973339 NA abundance
Clostridium_symbiosum diagnosis_test -0.1785177 0.0920463 0.2839023 0.3410146 NA abundance
Clostridium_symbiosum dysbiosis_test -0.9615608 0.2996289 0.7550008 0.0954200 NA abundance
Ruthenibacterium_lactatiformans diagnosis_test 0.0028017 0.0997579 0.2513536 0.6997961 NA abundance
Ruthenibacterium_lactatiformans dysbiosis_test -0.5748145 0.3564199 0.8905093 0.2960049 NA abundance
Clostridium_sp_AF20_17LB diagnosis_test 1.1123689 2.0111026 0.2314553 0.0001138 NA abundance
Clostridium_sp_AF20_17LB dysbiosis_test -0.0275826 0.3827385 1.1850668 0.7292728 NA abundance
GGB9713_SGB15249 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB9713_SGB15249 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB51647_SGB4348 diagnosis_test -1.0849751 0.0955637 0.6586031 0.0756838 NA abundance
GGB51647_SGB4348 dysbiosis_test 2.4677206 4.5365514 2.8054719 0.4623647 NA abundance
Roseburia_sp_AF02_12 diagnosis_test 0.0796894 0.1086373 0.4857109 0.9525085 NA abundance
Roseburia_sp_AF02_12 dysbiosis_test 1.1656546 1.9312101 1.8537516 0.6798733 NA abundance
GGB1549_SGB2133 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB1549_SGB2133 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Clostridium_sp_AT4 diagnosis_test 0.6388999 1.1189756 0.2429692 0.0486976 NA abundance
Clostridium_sp_AT4 dysbiosis_test -2.1028818 0.2685566 0.8898410 0.0079378 NA abundance
GGB6601_SGB9333 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB6601_SGB9333 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB4237_SGB5728 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB4237_SGB5728 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Phocaeicola_sartorii diagnosis_test -1.1207919 0.0552817 0.3707655 0.0016261 NA abundance
Phocaeicola_sartorii dysbiosis_test 0.2432475 0.3942323 1.0761594 0.8884912 NA abundance
Proteus_mirabilis diagnosis_test 0.6175229 1.1270857 1.0915816 0.6417384 NA abundance
Proteus_mirabilis dysbiosis_test -3.9055720 0.3237163 1.6331573 0.0111692 NA abundance
Clostridium_sp_1001270H_150608_G6 diagnosis_test -3.9516618 0.0725697 0.8484539 0.0000054 NA abundance
Clostridium_sp_1001270H_150608_G6 dysbiosis_test 6.7682258 13.1148032 3.3563378 0.0608097 NA abundance
Alistipes_communis diagnosis_test -0.2132057 0.0950943 0.3256290 0.3443225 NA abundance
Alistipes_communis dysbiosis_test -1.4221397 0.3939460 2.3845069 0.4467374 NA abundance
Dysgonomonas_mossii diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Dysgonomonas_mossii dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB33469_SGB15236 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB33469_SGB15236 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Vescimonas_coprocola diagnosis_test -0.5029236 0.0612927 0.2740794 0.0399716 NA abundance
Vescimonas_coprocola dysbiosis_test -0.9044740 0.3840356 1.6215213 0.4271477 NA abundance
Rikenellaceae_bacterium diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Rikenellaceae_bacterium dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Prevotella_SGB48271 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Prevotella_SGB48271 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Bacteroides_salyersiae diagnosis_test 2.3003216 4.4409099 0.5235943 0.0000724 NA abundance
Bacteroides_salyersiae dysbiosis_test 3.3324069 6.2632432 2.7020269 0.2799013 NA abundance
Ruminococcus_lactaris diagnosis_test 1.0178938 1.8776708 0.3362580 0.0109583 NA abundance
Ruminococcus_lactaris dysbiosis_test -0.7564681 0.3968985 2.7023087 0.6697668 NA abundance
GGB3304_SGB4367 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB3304_SGB4367 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Bacteroides_intestinalis diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Bacteroides_intestinalis dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Phascolarctobacterium_succinatutens diagnosis_test 1.0758348 2.0142686 0.4452827 0.0372095 NA abundance
Phascolarctobacterium_succinatutens dysbiosis_test 1.4209888 2.4388468 1.7460162 0.5610420 NA abundance
Bacteroides_mediterraneensis diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Bacteroides_mediterraneensis dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
Collinsella_aerofaciens diagnosis_test 1.5445086 2.8284454 0.2302233 0.0000000 NA abundance
Collinsella_aerofaciens dysbiosis_test -2.4403234 0.3327372 1.3416687 0.0391184 NA abundance
GGB33512_SGB15201 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB33512_SGB15201 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB3175_SGB4191 diagnosis_test 1.7272481 3.3352435 0.8802840 0.0697907 NA abundance
GGB3175_SGB4191 dysbiosis_test -0.2643576 0.3978142 3.0690347 0.8294768 NA abundance
Clostridium_sp_AM49_4BH diagnosis_test 0.8158271 1.5005320 0.4269429 0.1097112 NA abundance
Clostridium_sp_AM49_4BH dysbiosis_test -1.8901241 0.3974695 3.0957101 0.4604496 NA abundance
Lactobacillus_acidophilus diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Lactobacillus_acidophilus dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB16040_SGB9347 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB16040_SGB9347 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Collinsella_SGB14861 diagnosis_test 0.9476102 1.7252530 0.2742548 0.0047340 NA abundance
Collinsella_SGB14861 dysbiosis_test 0.1666814 0.3955316 1.4748457 0.8767417 NA abundance
Veillonella_rogosae diagnosis_test 0.2747100 0.4387904 0.4880250 0.7370644 NA abundance
Veillonella_rogosae dysbiosis_test -1.4209957 0.3576558 1.2648092 0.1612063 NA abundance
Butyrivibrio_crossotus diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
Butyrivibrio_crossotus dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB9453_SGB14844 diagnosis_test -0.3182356 0.1001394 0.4526955 0.3564302 NA abundance
GGB9453_SGB14844 dysbiosis_test 0.3864181 0.3970509 1.2453681 0.9931958 NA abundance
Lacrimispora_celerecrescens diagnosis_test 0.7337475 1.2752798 0.2003147 0.0070191 NA abundance
Lacrimispora_celerecrescens dysbiosis_test 0.0905306 0.3874882 0.9094819 0.7441276 NA abundance
Coprococcus_comes diagnosis_test 0.4648681 0.7749290 0.1988752 0.1194004 NA abundance
Coprococcus_comes dysbiosis_test -0.0132531 0.3858249 1.2734320 0.7540731 NA abundance
Tyzzerella_nexilis diagnosis_test -0.3283832 0.1020869 0.5000729 0.3904852 NA abundance
Tyzzerella_nexilis dysbiosis_test 0.8305057 1.2521440 0.9928351 0.6715764 NA abundance
Oscillospiraceae_bacterium diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Oscillospiraceae_bacterium dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Clostridiaceae_bacterium_Marseille_Q4149 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Clostridiaceae_bacterium_Marseille_Q4149 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB3267_SGB4317 diagnosis_test 2.3010764 4.4812440 1.0380383 0.0412165 NA abundance
GGB3267_SGB4317 dysbiosis_test 3.6363658 6.8708327 3.0449046 0.2936648 NA abundance
GGB9480_SGB14874 diagnosis_test 0.2112587 0.3100378 0.3332209 0.7670860 NA abundance
GGB9480_SGB14874 dysbiosis_test -5.0277653 0.3535415 2.4715390 0.0301787 NA abundance
GGB3478_SGB14857 diagnosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
GGB3478_SGB14857 dysbiosis_test NA 0.0000000 NA NA Predictors not in the model had non-zero contrast values abundance
Gemmiger_formicilis diagnosis_test 1.8824603 3.5788730 0.3716797 0.0000064 NA abundance
Gemmiger_formicilis dysbiosis_test -3.4902247 0.3133527 1.4053078 0.0070487 NA abundance
GGB58485_SGB80143 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB58485_SGB80143 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB28645_SGB41268 diagnosis_test NA 0.0000000 NA NA Fit is NA abundance
GGB28645_SGB41268 dysbiosis_test NA 0.0000000 NA NA Fit is NA abundance
  1. 命令行运行

MaAsLin 3 也可以通过命令行界面运行。例如,第一个 HMP2 分析可以使用以下方式执行:

确保提供 MaAsLin3 可执行文件的完整路径(即 ./R/maaslin3.R)。 在演示命令中: -inst/extdata/HMP2_taxonomy.tsv 是数据(或特征)文件的路径 -inst/extdata/HMP2_metadata.tsv 是元数据文件的路径 -command_line_output 是写入输出的文件夹的路径


#./R/maaslin3.R inst/extdata/HMP2_taxonomy.tsv inst/extdata/HMP2_metadata.tsv command_line_output --formula='~ diagnosis + dysbiosis_state + antibiotics + age + reads' --reference='diagnosis,nonIBD;dysbiosis_state,none;antibiotics,No'

If used this script, please cited: 使用此脚本,请引用下文:

Yong-Xin Liu, Lei Chen, Tengfei Ma, Xiaofang Li, Maosheng Zheng, Xin Zhou, Liang Chen, Xubo Qian, Jiao Xi, Hongye Lu, Huiluo Cao, Xiaoya Ma, Bian Bian, Pengfan Zhang, Jiqiu Wu, Ren-You Gan, Baolei Jia, Linyang Sun, Zhicheng Ju, Yunyun Gao, Tao Wen, Tong Chen. 2023. EasyAmplicon: An easy-to-use, open-source, reproducible, and community-based pipeline for amplicon data analysis in microbiome research. iMeta 2: e83. https://doi.org/10.1002/imt2.83

Copyright 2016-2024 Defeng Bai , Chuang Ma , Jiani Xun , Yong-Xin Liu